package caylus.Model;

import caylus.Enum.CoupsPossibles;
import java.util.ArrayList;
import caylus.Enum.PhaseConstructionChateau;
import caylus.Enum.PhaseDuJeu;
import caylus.GUI.ConversionFaveurs;
import caylus.GUI.GeneralSettings;
import caylus.GUI.PlateauDuJeu;
import java.io.Serializable;
import javax.swing.JLabel;


public class Croupier implements Serializable{
    
	private ArrayList<Joueur> _joueurs;
	public ArrayList<Case> _cases;             // public?
    public ArrayList<Etiquette> _etiquettes;   // public?
	public Chateau _chateau;
	private PhaseDuJeu _phaseDuJeu;
    private PhaseConstructionChateau _phaseConstructionChateau;
	private Prevot _lePrevot;
	private Bailli _leBailli;
    private GeneralSettings _generalSettings;
    private ArrayList<CoupsPossibles> _coupsPossibles;
    private boolean _finDeJeu ;
    public Joueur _joueurCourant;
    public PlateauDuJeu _plateauDeJeu;
    public int _NbOuvrierDansCase5 = 0 ;
    public int NbOuvrierDansChateau = 0 ;
    public Joueur Pl1, Pl2 ;
    public ArrayList<Joueur> SauvegardeListeJoueurPourPhaseQuatre = new ArrayList<Joueur>();
    private int parcourir = 0 ;
    private int ctr = 0 ;
    private boolean _leDonjonAeteDecompte = false ;
    private boolean _leMuraillesAeteDecompte = false ;
    private boolean _leToursAeteDecompte = false ;

    
	public Croupier(GeneralSettings pGeneralSettings, PlateauDuJeu pPlateauDejeu){
        _lePrevot = new Prevot();
        _leBailli = new Bailli(_lePrevot);
        _generalSettings = pGeneralSettings;
        _phaseDuJeu = PhaseDuJeu.PREPARATION;  // Phase 0
        _phaseConstructionChateau = PhaseConstructionChateau.DONJON;
        _finDeJeu = true ;
        _plateauDeJeu = pPlateauDejeu;
        _coupsPossibles = new ArrayList<CoupsPossibles>();
        _initialisation();
	}
    public boolean placementPossible(int pSelection) {
       if (pSelection==4 & _NbOuvrierDansCase5 <3) return true ;
       if (pSelection==4 & _NbOuvrierDansCase5 >3) return false ;
       if((pSelection >= 0)&(pSelection<39)) {
            if(_cases.get(pSelection).estOccupee()) return false;
            else return true;
       }

       if(pSelection == 1881)// chateau
       {
           if(_chateau.getNbPlacesDisponibles()<5)
               return true;
           else return false;
       }
       return false;
    }

    public void set_joueurs(ArrayList<Joueur> _joueurs) {
         this._joueurs = _joueurs;
    }

    Object get_chateau() {
        return _chateau;
    }

    Object get_generalSettings() {
        return _generalSettings;
    }

    Object get_joueurCourant() {
        return _joueurCourant;
    }

    Object get_phaseConstructionChateau() {
        return _phaseConstructionChateau;
    }

    Object get_phaseDuJeu() {
        return _phaseDuJeu;
    }
    private void _initialisation() {
        initialiserLesJoueurs();
        initialiserLesEtiquettes();
        initialiserLesCases();
        initialiserLeChateau();
        _joueurs.get(0).getRessouces().setDeniers(5);
        _joueurs.get(1).getRessouces().setDeniers(6);
        _joueurs.get(2).getRessouces().setDeniers(6);
        _joueurs.get(3).getRessouces().setDeniers(7);
        _joueurs.get(4).getRessouces().setDeniers(7);
        phaseUne();
    }
    public void PreparerPhaseDeux(){
        _phaseDuJeu = PhaseDuJeu.PLACEMENT_OUVRIER ;
        _plateauDeJeu.repaint();
        //elle s'occupe de preparer l'interface pour la saisie qui concerne la phase 2
        if(!_joueurCourant.estActif()) _joueurCourant = joueurSuivant();
        actualisationDesCoupsPossibles(_joueurCourant);
        _plateauDeJeu.actualiserListeCommandes();
        _plateauDeJeu.repaint();
    }
    public void TraitementPhaseDeux() {
        System.out.println(_joueurCourant.getNom());
        switch (convertStringToCoupsPossible(_plateauDeJeu.getjComboBoxCommandesCoupsPossible())) {
            case PASSER_SON_TOUR:
                _joueurCourant.setActif(false);
                System.out.println("Passer son tour");
                _plateauDeJeu.deselection();
                break;
            case PLACER_OUVRIER_DANS_UNE_CASE :
                _joueurCourant.payerEnDeniers(calculerLeCoutDePlacementDunOuvrier(_joueurCourant));
                _joueurCourant.placerOuvrierDansUneCase(_cases.get(_plateauDeJeu.get_selection()),_joueurCourant.getOuvriers().get(_joueurCourant.getOuvriers().size()-1));
                _plateauDeJeu.set_selection(-1);
                System.out.println("dans une case");
                _plateauDeJeu.deselection();
                break;
            case PLACER_OUVRIER_DANS_LE_CHATEAU:
                _joueurCourant.payerEnDeniers(calculerLeCoutDePlacementDunOuvrier(_joueurCourant));
                _joueurCourant.placerOuvrierDansLeChateau(_chateau,  _joueurCourant.getOuvriers().get(_joueurCourant.getOuvriers().size()-1));
                _plateauDeJeu.set_selection(-1);
                System.out.println("dans chateau");
                _plateauDeJeu.deselection();
                break;
            default:
                _plateauDeJeu.deselection();
                System.out.println("trois");
                break;
        }
        if (!finDeLaPhaseDeux())
        {
            _joueurCourant = joueurSuivant();
            PreparerPhaseDeux();
        }
        else {
            _plateauDeJeu.cacherZoneCommandes();
            _joueurCourant = joueurSuivant();
            //enihiber le bouton lancer et le combobox et commentaires : à faire
            //FinDePartie();
            preparerPhaseTrois();
        }
    }
    public void preparerPhaseTrois() {
        System.out.println("preparation phase 3");
        _phaseDuJeu = PhaseDuJeu.ACTIVATION_BATIMENTS_SPECIAUX ;
        _plateauDeJeu.repaint();
        //_plateauDeJeu.afficherPaneauPhaseTrois();
        preparerCaseSpecialeUne();
    }
    public void preparerCaseSpecialeUne() {
        System.out.println("preparer case speciale une");
        _plateauDeJeu.caseSpecialeTraitee = 1 ;
        _plateauDeJeu.repaint();
        if (_cases.get(0).getOuvrier() != null) { // il y a un ouvrier dans la premiere case
            // l'ouvrier est possedé par une IA
            if ((_cases.get(0).getOuvrier().getPatron().getNom().equals("IA-1")) | (_cases.get(0).getOuvrier().getPatron().getNom().equals("IA-2")) | (_cases.get(0).getOuvrier().getPatron().getNom().equals("IA-3")) | (_cases.get(0).getOuvrier().getPatron().getNom().equals("IA-4")) | (_cases.get(0).getOuvrier().getPatron().getNom().equals("IA-5"))) {
                // traitement par l'IA
                preparerCaseSpecialeDeux();
            }   else    {// l'ouvrier est possédé par un joueur humain
                // preparer l'interface pour l'entree joueur
                 _plateauDeJeu.afficherMassagePhaseTrois(_cases.get(0).getOuvrier().getPatron().getNom());
                 _plateauDeJeu.activerjButtonAppliquer();
            }
        }   else    { // la case est vide, on passe à la case suivante
            preparerCaseSpecialeDeux();
        }
    }
    public void activerCaseSpecialeUne() {
        System.out.println("activer case speciale une");
        Joueur player = _cases.get(0).getOuvrier().getPatron() ;
        Ouvrier zoufri = _cases.get(0).getOuvrier() ;
        if (_cases.get(_plateauDeJeu.get_selection()).getJoueurProprietaire() != null ) _cases.get(_plateauDeJeu.get_selection()).getJoueurProprietaire().gagnerPointsPrestige(1);
        player.recupererOuvrierDuneCase(_cases.get(0));
        player.placerOuvrierDansUneCase(_cases.get( _plateauDeJeu.get_selection()), zoufri);
        _plateauDeJeu.set_selection(-1);
        preparerCaseSpecialeDeux();
    }
    public void preparerCaseSpecialeDeux(){
        System.out.println("preparer C 2");
        _plateauDeJeu.caseSpecialeTraitee = 2 ;
        if(_cases.get(1).getOuvrier() != null ) { // il y a un ouvrier
            _cases.get(1).getOuvrier().getPatron().recevoirDeniers(2);
            Joueur player = _cases.get(1).getOuvrier().getPatron();
            player.recupererOuvrierDuneCase(_cases.get(1));
            _plateauDeJeu._emplacementOuvriers.get(1).setVisible(false);
            _plateauDeJeu.actualiserZoneAffichageCroupier();
        }
        preparerCaseSpecialeTrois();
    }
    public void preparerCaseSpecialeTrois() {
        System.out.println("preparer C 3");
        if(_cases.get(2).getOuvrier() != null) { // case avec ouvrier
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 case vers l'avant");
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 case vers l'arrière");
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 cases vers l'avant");
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 cases vers l'arrière");
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("3 cases vers l'avant");
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("3 cases vers l'arrière");
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("ne pas déplacer le Prévot");
            _plateauDeJeu.caseSpecialeTraitee = 3 ;
            _plateauDeJeu.activerZoneCommandes();
            _plateauDeJeu.afficherMassagePhaseTroisGuildeMarchands(_cases.get(2).getOuvrier().getPatron().getNom());
        }   else    { // case sans ouvrier
            System.out.println("non preparer C 3");
            PreparerCaseSpecialeQuatre();
        }
    }
    public void activerCaseSpecialeTrois (int NbCase ) {
        System.out.println("activer C 3");
        _plateauDeJeu.cacherZoneCommandes();
        Joueur player = _cases.get(2).getOuvrier().getPatron();
        player.recupererOuvrierDuneCase(_cases.get(2));
        if (NbCase != 0)
            this._lePrevot.seDeplacer(NbCase);
        _plateauDeJeu.replacerBailliPrevot();
        if (NbCase >= 0)
            player.payerEnDeniers(NbCase);
        else
            player.payerEnDeniers(-NbCase);
        _plateauDeJeu.repaint();
        PreparerCaseSpecialeQuatre();
    }
    public void PreparerCaseSpecialeQuatre(){
        System.out.println("preparer C 4");
        _plateauDeJeu.caseSpecialeTraitee = 4 ;
        if (_cases.get(3).getOuvrier() != null) {
            Lot prix = new Lot(1, 0, 1, 0, 0, 0);
            if (_cases.get(3).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(prix)) {
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("obtenir une faveur du Roi");
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("ne rien faire");
                _plateauDeJeu.activerZoneCommandes();
                _plateauDeJeu.afficherMassagePhaseTroisGuildeChampsDeJoute(_cases.get(3).getOuvrier().getPatron().getNom());
            }   else    {
                Joueur player = _cases.get(3).getOuvrier().getPatron();
                player.recupererOuvrierDuneCase(_cases.get(3));
                _plateauDeJeu._emplacementOuvriers.get(3).setVisible(false);
                PreparerCaseSpecialeCinq();
            }
        } else  {
             PreparerCaseSpecialeCinq();
        }
    }
    public void activerCaseSpecialeQuantre(int choix) {
        Joueur player = _cases.get(3).getOuvrier().getPatron();
        player.recupererOuvrierDuneCase(_cases.get(3));
        if(choix == 1) {
            System.out.println("le joueur a eu des faveurs de roi");
            Lot prix = new Lot(1, 0, 1, 0, 0, 0);
            _cases.get(2).getOuvrier().getPatron().payer(prix);
            _cases.get(2).getOuvrier().getPatron().gagnerFaveurDeRoi(1);
        }   else {
            PreparerCaseSpecialeCinq();
        }
    }
    public void PreparerCaseSpecialeCinq() {
        if (_cases.get(4).getOuvrier() != null) {
            _plateauDeJeu.caseSpecialeTraitee = 5 ;
            Joueur player1 = _cases.get(4).getOuvrier().getPatron();
            Joueur player2 = Pl1 ;
            Joueur player3 = Pl2 ;
            ArrayList<Joueur> tmpJoueurs = new ArrayList<Joueur>();
            tmpJoueurs.add(player1);
            if (player2 != null) tmpJoueurs.add(player2);
            if (player3 != null) tmpJoueurs.add(player3);
            for(int j=0;j<5;j++) {
                if (_joueurs.get(j) != player1 & _joueurs.get(j) != player2 & _joueurs.get(j) != player3 ) tmpJoueurs.add(_joueurs.get(j));
            }
            SauvegardeListeJoueurPourPhaseQuatre = _joueurs ;
            _joueurs = tmpJoueurs ;
            _joueurCourant = _joueurs.get(0);
            Pl1 = null ;
            Pl2 = null ;
            player1 = _cases.get(4).getOuvrier().getPatron();
            player1.recupererOuvrierDuneCase(_cases.get(4));
            _plateauDeJeu._emplacementOuvriers.get(4).setVisible(false);
            _plateauDeJeu._emplacementOuvriers.get(34).setVisible(false);
            _plateauDeJeu._emplacementOuvriers.get(35).setVisible(false);
            _plateauDeJeu.afficherMassageChangementClassement();
            _plateauDeJeu.repaint();
            preparerCaseSpecialeSix();
        }   else    {
             SauvegardeListeJoueurPourPhaseQuatre = _joueurs ;
            preparerCaseSpecialeSix();
        }
    }
    public void preparerCaseSpecialeSix(){
        _plateauDeJeu.caseSpecialeTraitee = 6 ;
        if(_cases.get(5).getOuvrier() != null ) {
            _cases.get(5).getOuvrier().getPatron().setPayeUniquementUnDenierPourPlacerSesOuvriers(true);
            _plateauDeJeu.afficherMessageCaseSpecialeSix(_cases.get(5).getOuvrier().getPatron().getNom());
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("recuperer l'ouvrier");
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("laisser l'ouvrier");
            _plateauDeJeu.activerZoneCommandes();
        }   else    {
            parcourir = 0 ;
            preparerPhaseQuatre(0);
        }
    }
    public void activerCaseSpecialeSix(int choix) {
        if( choix==1 ) {
            _cases.get(5).getOuvrier().getPatron().recupererOuvrierDuneCase(_cases.get(5));
            _plateauDeJeu._emplacementOuvriers.get(5).setVisible(false);
            parcourir = 0 ;
            preparerPhaseQuatre(parcourir);
        }   else    {
            parcourir = 0;
            preparerPhaseQuatre(parcourir);
        }
    }
    public void preparerPhaseQuatre(int index){
        this._phaseDuJeu = PhaseDuJeu.DEPLACEMENT_PREVOT ;
        _plateauDeJeu.repaint();
        _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
        if (this.SauvegardeListeJoueurPourPhaseQuatre.get(index).leJoueurPossedeSuffisamentDeRessource(new Lot(1,0,0,0,0,0))) {
            if (_lePrevot.getPosition() < 34 ) _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 case vers l'avant");
            if (_lePrevot.getPosition() > 7 ) _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 case vers l'arrière");
            if (this.SauvegardeListeJoueurPourPhaseQuatre.get(index).leJoueurPossedeSuffisamentDeRessource(new Lot(2,0,0,0,0,0))) {
                if (_lePrevot.getPosition() < 33 ) _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 cases vers l'avant");
                if (_lePrevot.getPosition() > 8 ) _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 cases vers l'arrière");
            }
            if (this.SauvegardeListeJoueurPourPhaseQuatre.get(index).leJoueurPossedeSuffisamentDeRessource(new Lot(3,0,0,0,0,0))) {
                if (_lePrevot.getPosition() < 32 ) _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("3 cases vers l'avant");
                if (_lePrevot.getPosition() > 9 ) _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("3 cases vers l'arrière");
            }
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("ne rien faire");
            _plateauDeJeu.afficherMassagePhaseQuatreJoueurParJoueur(SauvegardeListeJoueurPourPhaseQuatre.get(index).getNom());
            _plateauDeJeu.activerZoneCommandes();
        }   else    {
            if(index <= 4) 
                preparerPhaseQuatre(++parcourir);
            else
                preparerPhaseCinq();
        }
    }
    public void traitementPhaseQuatre(int choix) {
        _plateauDeJeu.cacherZoneCommandes();
        _lePrevot.seDeplacer(choix);
        if(choix >= 0)
            this.SauvegardeListeJoueurPourPhaseQuatre.get(parcourir).payerEnDeniers(choix);
        else
            this.SauvegardeListeJoueurPourPhaseQuatre.get(parcourir).payerEnDeniers(-choix);
        _plateauDeJeu.replacerBailliPrevot();
        _plateauDeJeu.repaint();
        if(parcourir<4) preparerPhaseQuatre(++parcourir);
        else preparerPhaseCinq();
    }
    public void preparerPhaseCinq() {
        System.out.println("preparation de la phase 5");
        _phaseDuJeu = PhaseDuJeu.ACTIVATION_BATIMENTS ;
        _plateauDeJeu.repaint();
        preparerCaseSept();
      }
    public void preparerCaseSept(){
         if(_cases.get(6).getOuvrier() != null) // la case contient un ouvrier
           _plateauDeJeu.afficherMessageCaseSept(_cases.get(6).getOuvrier().getPatron().getNom());
         else
           preparerCaseHuit();
     }
    public void traitementCaseSept(){
          _cases.get(6).getEtiquette().action(1881,null); // 1881 : il n'y a pas de choix ici
          _plateauDeJeu._emplacementOuvriers.get(6).setVisible(false);
          preparerCaseHuit();
     }
    public void preparerCaseHuit(){
        if(_lePrevot.getPosition() >= 8) {
            _plateauDeJeu.caseSpecialeTraitee = 8; // caseSpecialeTraitee to be refactored to caseTraitee
              if(_cases.get(7).getOuvrier() != null){ // la case contient un ouvrier
                  _plateauDeJeu.afficherMessageCaseHuit(_cases.get(7).getOuvrier().getPatron().getNom());
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 Bois");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 Nourriture");
                  _plateauDeJeu.activerZoneCommandes();
              }
              else
                  preparerCaseNeuf();
        }
        else    {
            _plateauDeJeu.messagePhaseCinqTerminee();
            preparerPhaseSix(); // activation des batiment est finie!! le prévot est là!!
        }
     }
    public void traitementCaseHuit(int pChoix){
        _plateauDeJeu.cacherZoneCommandes();
         _cases.get(7).getEtiquette().action(pChoix,null);
         preparerCaseNeuf();
     }
    public void preparerCaseNeuf(){
        if(_lePrevot.getPosition() >= 9) {
            _plateauDeJeu.caseSpecialeTraitee = 9;
            if(_cases.get(8).getOuvrier() != null){ // la case contient un ouvrier
                _plateauDeJeu.afficherMessageCaseNeuf(_cases.get(8).getOuvrier().getPatron().getNom());
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("Choisir mon batiment");
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("Ne rien construire");
                _plateauDeJeu.activerZoneCommandes();
            }
             else
               preparerCaseDix();
         }
         else    {
            _plateauDeJeu.messagePhaseCinqTerminee();
            preparerPhaseSix(); // activation des batiment est finie!! le prévot est là!!
        }
     }
    public void traitementCaseNeuf(){
         _plateauDeJeu.cacherZoneCommandes();
         _cases.get(8).getEtiquette().action(1881,null);
         _plateauDeJeu.preparerChoixEtiquettes(_cases.get(8).getOuvrier().getPatron());
         preparerCaseDix();
     }
    public void preparerCaseDix(){
        if(_lePrevot.getPosition() >= 10) {
             _plateauDeJeu.caseSpecialeTraitee = 10;
              if(_cases.get(9).getOuvrier() != null){ // la case contient un ouvrier

                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("Ne rien donner");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 Bois --> 4 Denier");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 Tissu --> 4 Denier");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 Or --> 4 Denier");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 Pierre --> 4 Denier");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 Nourriture --> 4 Denier");
                  _plateauDeJeu.afficherMessageCaseDix(_cases.get(9).getOuvrier().getPatron().getNom());
                  _plateauDeJeu.activerZoneCommandes();
              }
              else
                  preparerCaseOnze();
        }
        else    {
            _plateauDeJeu.messagePhaseCinqTerminee();
            preparerPhaseSix(); // activation des batiment est finie!! le prévot est là!!
        }
     }
    public void traitementCaseDix(int pChoix){
        _plateauDeJeu.cacherZoneCommandes();
         _cases.get(9).getEtiquette().action(pChoix,null);
         preparerCaseOnze();
     }
    public void preparerCaseOnze(){
        if(_lePrevot.getPosition() >= 11) {
              _plateauDeJeu.caseSpecialeTraitee = 11; // caseSpecialeTraitee to be refactored to caseTraitee
              if(_cases.get(10).getOuvrier() != null){ // la case contient un ouvrier
                  _plateauDeJeu.afficherMessageCaseOnze(_cases.get(10).getOuvrier().getPatron().getNom());
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 Nourriture");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 Tissu");
                  _plateauDeJeu.activerZoneCommandes();
              }
              else
                  preparerCaseDouze();
        }
         else    {
            _plateauDeJeu.messagePhaseCinqTerminee();
            preparerPhaseSix(); // activation des batiment est finie!! le prévot est là!!
        }
     }
    public void traitementCaseOnze(int pChoix){
        _plateauDeJeu.cacherZoneCommandes();
        _cases.get(10).getEtiquette().action(pChoix,null);
        preparerCaseDouze();
     }
    public void preparerCaseDouze(){
        if(_lePrevot.getPosition() >= 12) {
             if(_cases.get(11).getOuvrier() != null) {// la case contient un ouvrier
                    _plateauDeJeu.cacherZoneCommandes();
                    _plateauDeJeu.afficherMessageCaseDouze(_cases.get(11).getOuvrier().getPatron().getNom());
                    _cases.get(11).getEtiquette().action(1881,null); // 1881 : il n'y a pas de choix ici
                    preparerCaseTreize();
                }   else
                    preparerCaseTreize();
        }
         else    {
            _plateauDeJeu.messagePhaseCinqTerminee();
            preparerPhaseSix(); // activation des batiment est finie!! le prévot est là!!
        }
     }
    public void preparerCaseTreize(){// tous controle compris
       if(_lePrevot.getPosition() >= 13) {
            _plateauDeJeu.caseSpecialeTraitee = 13; // caseSpecialeTraitee to be refactored to caseTraitee
              if(_cases.get(12).getOuvrier() != null)
                if(_cases.get(12).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(2, 0, 0, 0, 0, 0))){ // la case contient un ouvrier
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("Ne rien donner");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 Deniers -> 1 Bois");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 Deniers -> 1 Tissu");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 Deniers -> 1 Pierre");
                  _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 Deniers -> 1 Nourriture");
                  _plateauDeJeu.activerZoneCommandes();
                  _plateauDeJeu.afficherMessageCaseTreize(_cases.get(12).getOuvrier().getPatron().getNom());
                  System.out.println("heniiii");
              }
                else
                    _plateauDeJeu.afficherMessageCaseTreizeErreur(_cases.get(12).getOuvrier().getPatron().getNom());
             else   {
                  preparerCaseQuatorze();
              }
       }
       else    {
            _plateauDeJeu.messagePhaseCinqTerminee();
            preparerPhaseSix(); // activation des batiment est finie!! le prévot est là!!
        }
     }
    public void traitementCaseTreize(int pChoix){
        _plateauDeJeu.cacherZoneCommandes();
        _cases.get(12).getEtiquette().action(pChoix,null);
        _cases.get(12).getOuvrier().getPatron().recupererOuvrierDuneCase(_cases.get(12));
        preparerCaseQuatorze();
    }
    public void preparerCaseQuatorze(){
        _plateauDeJeu.caseSpecialeTraitee = 14;
        if(_cases.get(13).getOuvrier() != null){ // la case contient un ouvrier
            _plateauDeJeu.afficherMessageCaseNeuf(_cases.get(13).getOuvrier().getPatron().getNom());
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("Choisir mon batiment");
            _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("Ne rien construire");
            _plateauDeJeu.activerZoneCommandes();
        }   else    {
             _plateauDeJeu.caseSpecialeTraitee = 14;
             preparerCaseDynamique(15);
        }
    }
    public void traitementCaseQuatorze(){
         _plateauDeJeu.cacherZoneCommandes();
         _cases.get(41).getEtiquette().action(1881,null);
    }
    public void preparerCaseDynamique(int numCase) {
        if(_cases.get(numCase).getEtiquette() == null){
            _plateauDeJeu.messagePhaseCinqTerminee();
            preparerPhaseSix(); // activation des batiment est finie!! le prévot est là!!
        }
        else  if(_lePrevot.getPosition() < numCase & (numCase == 22)) {
                    _plateauDeJeu.cacherZoneCommandes();
                    _cases.get(21).getOuvrier().getPatron().recevoir(new Lot(0, 0, 0, 1, 0, 0));
                    preparerCaseDynamique(numCase+1);
                 }   else    {
                            if(_lePrevot.getPosition() < numCase) {
                                   _plateauDeJeu.caseSpecialeTraitee = numCase ;
                                   if(_cases.get(numCase-1).getOuvrier() != null) {
                                       _plateauDeJeu.jComboBoxCommandesCoupsPossible.removeAllItems();
                                       _plateauDeJeu.activerZoneCommandes();
                                       charger(numCase);
                                     }    else    {
                                             preparerCaseDynamique(numCase+1);
                                        }
                            }   else    {
                                preparerPhaseSix();
                            }
            }
    }
    public void traitementCaseDynamique(int choix) {
        switch(choix) {
            case 7 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 8 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 9 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 10 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 11 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 12 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 13 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 14 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 15 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 16 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 19 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 20 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 21 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,_plateauDeJeu.lot);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 23 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 24 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 25 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 26 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 27 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 28 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 29 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 30 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 31 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 32 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 33 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 34 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 36 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 37 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 38 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 39 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            case 40 :
                _cases.get(_plateauDeJeu.caseSpecialeTraitee-1).getEtiquette().action(choix,null);
                preparerCaseDynamique(_plateauDeJeu.caseSpecialeTraitee+1);
                break ;
            default :
                break ;
        }
//        if (_plateauDeJeu.caseSpecialeTraitee == _lePrevot.getPosition())
//            preparerPhaseSix();
    }
    public void preparerPhaseSix() {
        _phaseDuJeu = PhaseDuJeu.CONSTRUCTION_CHATEAU;
        if(_chateau._ouvriers.size() == 0){
            _plateauDeJeu.messageChateauVide();
            preparerPhaseSept();
        }else // Ca marche!!!!!
        if(_chateau._ouvriers.get(ctr) != null) {
            if( (_chateau._ouvriers.get(ctr).getPatron().getRessouces().getNouriture() > 0)& ( (_chateau._ouvriers.get(ctr).getPatron().getRessouces().getNouriture()-1)+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getBois())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getOr())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getPierre())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getTissu())>=2)){
                    _plateauDeJeu.preparerChoixNbLots();
                    switch(_plateauDeJeu.nbLots){
                        case 1:
                            _plateauDeJeu.preparerComposerLot(_chateau._ouvriers.get(ctr).getPatron(),_phaseDuJeu);
                            _chateau._ouvriers.get(ctr).getPatron().payer(_plateauDeJeu.lot);
                            _chateau.construireDansLeChateau(_chateau._ouvriers.get(ctr).getPatron(),_plateauDeJeu);
                            _chateau._ouvriers.set(ctr, null);
                            break;
                        case 2:
                            _plateauDeJeu.preparerComposerLot(_chateau._ouvriers.get(ctr).getPatron(),_phaseDuJeu);
                            _chateau._ouvriers.get(ctr).getPatron().payer(_plateauDeJeu.lot);
                            _chateau.construireDansLeChateau(_chateau._ouvriers.get(ctr).getPatron(),_plateauDeJeu);
                             if( (_chateau._ouvriers.get(ctr).getPatron().getRessouces().getNouriture() > 0)& ( (_chateau._ouvriers.get(ctr).getPatron().getRessouces().getNouriture()-1)+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getBois())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getOr())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getPierre())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getTissu())>=2)){
                                  _plateauDeJeu.preparerComposerLot(_chateau._ouvriers.get(ctr).getPatron(),_phaseDuJeu);
                                  _chateau._ouvriers.get(ctr).getPatron().payer(_plateauDeJeu.lot);
                                  _chateau.construireDansLeChateau(_chateau._ouvriers.get(ctr).getPatron(),_plateauDeJeu);
                                  _chateau._ouvriers.set(ctr, null);
                                  break;
                             }  else{
                                _chateau._ouvriers.set(ctr, null);
                                break;
                             }
                        case 3:
                            _plateauDeJeu.preparerComposerLot(_chateau._ouvriers.get(ctr).getPatron(),_phaseDuJeu);
                            _chateau._ouvriers.get(ctr).getPatron().payer(_plateauDeJeu.lot);
                            _chateau.construireDansLeChateau(_chateau._ouvriers.get(ctr).getPatron(),_plateauDeJeu);
                             if( (_chateau._ouvriers.get(ctr).getPatron().getRessouces().getNouriture() > 0)& ( (_chateau._ouvriers.get(ctr).getPatron().getRessouces().getNouriture()-1)+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getBois())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getOr())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getPierre())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getTissu())>=2)){
                                    _plateauDeJeu.preparerComposerLot(_chateau._ouvriers.get(ctr).getPatron(),_phaseDuJeu);
                                  _chateau._ouvriers.get(ctr).getPatron().payer(_plateauDeJeu.lot);
                                  _chateau.construireDansLeChateau(_chateau._ouvriers.get(ctr).getPatron(),_plateauDeJeu);
                                  if( (_chateau._ouvriers.get(ctr).getPatron().getRessouces().getNouriture() > 0)& ( (_chateau._ouvriers.get(ctr).getPatron().getRessouces().getNouriture()-1)+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getBois())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getOr())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getPierre())+(_chateau._ouvriers.get(ctr).getPatron().getRessouces().getTissu())>=2)){
                                        _plateauDeJeu.preparerComposerLot(_chateau._ouvriers.get(ctr).getPatron(),_phaseDuJeu);
                                          _chateau._ouvriers.get(ctr).getPatron().payer(_plateauDeJeu.lot);
                                          _chateau.construireDansLeChateau(_chateau._ouvriers.get(ctr).getPatron(),_plateauDeJeu);
                                          _chateau._ouvriers.set(ctr, null);
                                          break;
                                       }  else  {
                                          _chateau._ouvriers.set(ctr, null);
                                          break;
                                       }     
                             }  else    {
                                _chateau._ouvriers.set(ctr, null);
                                break;
                             }        
                    }
                    if (ctr < _chateau._ouvriers.size()-1) {
                    _chateau._ouvriers.set(ctr, null);
                    ctr++;
                    preparerPhaseSix();
                    }   else
                        preparerPhaseSept();
            }   else    { // deuxieme if
                // pénaliser joueur
                _plateauDeJeu.afficherMessagePenaliteChateau(_chateau._ouvriers.get(ctr).getPatron().getNom());
                _chateau._ouvriers.get(ctr).getPatron().modifierPrestige(-2);
                if(_chateau._ouvriers.get(ctr).getPatron().getPrestige() < 0 )
                    _chateau._ouvriers.get(ctr).getPatron().set_prestige(0);
                if (ctr < _chateau._ouvriers.size()-1) {
                _chateau._ouvriers.set(ctr, null);
                ctr++;
                preparerPhaseSix();
                }   else
                    preparerPhaseSept();
            }// end deuxieme if
        }   else    {//premier if
            if (ctr < _chateau._ouvriers.size()-1) {
                _chateau._ouvriers.set(ctr, null);
                ctr++;
                preparerPhaseSix();
            }
            else    preparerPhaseSept();
        }//end premier if
    } //end preparerPhaseSix
    public void preparerPhaseSept() {
        for(JLabel jb : _plateauDeJeu._emplacementChateau) {
            jb.setVisible(false);
        }
        _leBailli.avancer();
        _plateauDeJeu.replacerBailliPrevot();
        _lePrevot.rejoindreBailli(_leBailli);
        _plateauDeJeu.replacerBailliPrevot();
        // test decompte donjon : (bailli a atteint donjon ou donjon construit) et donjon pas décompté encore
        if((_leBailli.getPosition() >= 18|_plateauDeJeu.ctrDonjon == 6)& (!_leDonjonAeteDecompte)) {
            _leDonjonAeteDecompte = true ;
            _phaseDuJeu = PhaseDuJeu.COLLECTE_DES_REVENUS;
            decompteDonjon();
            for (Joueur unJoueur : _joueurs){
              unJoueur.recevoirDeniers(2);
              unJoueur.recevoirDeniers(unJoueur.getNbResidences());
              unJoueur.recevoirDeniers(unJoueur.getNbBibliotheques());
              unJoueur.recevoirDeniers(2 * unJoueur.getNbHotels());
            }
            PreparerPhaseDeux();
        }   else
        // test decompte murailles : (bailli a atteint murailles ou murailles construit) et murailles pas décompté encore
        if((_leBailli.getPosition() >= 24|_plateauDeJeu.ctrMurailles == 10)& (!_leMuraillesAeteDecompte)){
            _leMuraillesAeteDecompte = true ;
             _phaseDuJeu = PhaseDuJeu.COLLECTE_DES_REVENUS;
             decompteMurailles();
            for (Joueur unJoueur : _joueurs){
              unJoueur.recevoirDeniers(2);
              unJoueur.recevoirDeniers(unJoueur.getNbResidences());
              unJoueur.recevoirDeniers(unJoueur.getNbBibliotheques());
              unJoueur.recevoirDeniers(2 * unJoueur.getNbHotels());
            }
            PreparerPhaseDeux();
        }   else
        // test decompte tours : (bailli a atteint tours ou tours construit) et tours pas décompté encore
        if((_leBailli.getPosition() >= 30|_plateauDeJeu.ctrDonjon == 14)& (!_leToursAeteDecompte)) {
            _leToursAeteDecompte = true ;
             _phaseDuJeu = PhaseDuJeu.COLLECTE_DES_REVENUS;
             decompteTours();
            for (Joueur unJoueur : _joueurs){
              unJoueur.recevoirDeniers(2);
              unJoueur.recevoirDeniers(unJoueur.getNbResidences());
              unJoueur.recevoirDeniers(unJoueur.getNbBibliotheques());
              unJoueur.recevoirDeniers(2 * unJoueur.getNbHotels());
            }
            PreparerPhaseDeux();
        }   else
        //test decompte finale et fin de jeu
        if(_leBailli.getPosition() == 34){
            decompteFinale();
            FinDePartie();
        }   else {
            _phaseDuJeu = PhaseDuJeu.COLLECTE_DES_REVENUS;
            for (Joueur unJoueur : _joueurs){
              unJoueur.recevoirDeniers(2);
              unJoueur.recevoirDeniers(unJoueur.getNbResidences());
              unJoueur.recevoirDeniers(unJoueur.getNbBibliotheques());
              unJoueur.recevoirDeniers(2 * unJoueur.getNbHotels());
            }
            PreparerPhaseDeux();
        }
    }
    public void FinDePartie(){
        // afficher sur interfacre le gagant
        System.out.println("j'ai fini....");
    }
    public boolean estFinDeJeu() {
        return _finDeJeu;
    }
	public void initialiserLesJoueurs(){
		Joueur joueurUn = new Joueur(_generalSettings.get_nomJoueur1());
		Joueur joueurDeux = new Joueur(_generalSettings.get_nomJoueur2());
		Joueur joueurTrois = new Joueur(_generalSettings.get_nomJoueur3());
		Joueur joueurQuatre = new Joueur(_generalSettings.get_nomJoueur4());
		Joueur joueurCinq = new Joueur(_generalSettings.get_nomJoueur5());
        joueurUn.setCouleur(_generalSettings.get_couleurJ1());
        joueurDeux.setCouleur(_generalSettings.get_couleurJ2());
        joueurTrois.setCouleur(_generalSettings.get_couleurJ3());
        joueurQuatre.setCouleur(_generalSettings.get_couleurJ4());
        joueurCinq.setCouleur(_generalSettings.get_couleurJ5());
        
         _joueurs = new ArrayList<Joueur>();
        _joueurs.add(joueurUn);
		_joueurs.add(joueurDeux);
		_joueurs.add(joueurTrois);
		_joueurs.add(joueurQuatre);
		_joueurs.add(joueurCinq);
         for (Joueur j : _joueurs)
        {
            j.setCroupier(this);
        }
         _joueurCourant = joueurUn;
   }
    public void initialiserLesCases(){
        // créer les cases 
        _cases = new ArrayList<Case>();
        for (int i=1;i<=34;i++) {
            _cases.add(new Case(i));
        }
         for (int i=0;i<=5;i++) {
            _cases.get(i).set_caseSpeciale(true);
        }
         for (int i=6;i<=33;i++) {
            _cases.get(i).set_caseSpeciale(false);
        }

        _cases.get(6).setEtiquette(_etiquettes.get(2));
        _cases.get(7).setEtiquette(_etiquettes.get(5));
        _cases.get(8).setEtiquette(_etiquettes.get(0));
        _cases.get(9).setEtiquette(_etiquettes.get(3));
        _cases.get(10).setEtiquette(_etiquettes.get(1));
        _cases.get(11).setEtiquette(_etiquettes.get(4));
        _cases.get(12).setEtiquette(_etiquettes.get(40));
        _cases.get(13).setEtiquette(_etiquettes.get(41));
        _cases.get(21).setEtiquette(_etiquettes.get(42));
	}
    public void initialiserLesEtiquettes(){
       //Etiquettes rouges
       Etiquette red1 = new Etiquette(1, null);
       Etiquette red2 = new Etiquette(2, null);
       Etiquette red3 = new Etiquette(3, null);
       Etiquette red4 = new Etiquette(4, null);
       Etiquette red5 = new Etiquette(5, null);
       Etiquette red6 = new Etiquette(6, null);
       //Etiquettes marrons
       Etiquette brown7 = new Etiquette(7, new Lot(0, 1, 0, 0, 0, 1)); // un bois, un nourriture // prix à voir
       Etiquette brown8 = new Etiquette(8, new Lot(0, 1, 0, 0, 0, 1));
       Etiquette brown9 = new Etiquette(9, new Lot(0, 1, 1, 0, 0, 0));
       Etiquette brown10 = new Etiquette(10, new Lot(0, 1, 0, 0, 0, 1));
       Etiquette brown11 = new Etiquette(11, new Lot(0, 1, 0, 0, 0, 1));
       Etiquette brown12 = new Etiquette(12, new Lot(0, 1, 0, 0, 0, 1));  // prix à voir
       Etiquette brown13 = new Etiquette(13, new Lot(0, 1, 0, 0, 0, 1));
       Etiquette brown14 = new Etiquette(14, new Lot(0, 1, 0, 0, 0, 1));
       // Etiquettes grises
       Etiquette gray15 = new Etiquette(15, new Lot(0, 0, 0, 0, 1, 1));
       Etiquette gray16 = new Etiquette(16, new Lot(0, 0, 0, 0, 1, 1));
       Etiquette gray17 = new Etiquette(17, new Lot(0, 0, 0, 0, 1, 1));
       Etiquette gray18 = new Etiquette(18, new Lot(0, 0, 0, 0, 1, 1));
       Etiquette gray19 = new Etiquette(15, new Lot(0, 1, 0, 0, 1, 0));
       Etiquette gray20 = new Etiquette(20, new Lot(0, 1, 1, 0, 0, 0));
       Etiquette gray21 = new Etiquette(21, new Lot(0, 0, 0, 0, 1, 1));
       Etiquette gray22 = new Etiquette(22, new Lot(0, 0, 0, 0, 1, 1));
       Etiquette gray23 = new Etiquette(23, new Lot(0, 1, 0, 0, 1, 0));
       //Etiquettes vertes
       Etiquette green24 = new Etiquette(24, new Lot(1, 0, 1, 0, 0, 0));
       Etiquette green25 = new Etiquette(25, new Lot(1, 0, 1, 0, 0, 0));
       Etiquette green26 = new Etiquette(26, new Lot(1, 0, 1, 0, 0, 0));
       Etiquette green27 = new Etiquette(27, new Lot(1, 0, 1, 0, 0, 0));
       Etiquette green28 = new Etiquette(28, new Lot(1, 0, 1, 0, 0, 0));
       Etiquette green29 = new Etiquette(29, new Lot(1, 0, 1, 0, 0, 0));
       Etiquette green30 = new Etiquette(30, new Lot(1, 0, 1, 0, 0, 0));
       Etiquette green31 = new Etiquette(31, new Lot(1, 0, 1, 0, 0, 0));
       //Etiquettes Bleues
       Etiquette blue32 = new Etiquette(32, new Lot(0, 0, 0, 1, 2, 0));
       Etiquette blue33 = new Etiquette(33, new Lot(0, 3, 0, 2, 0, 0));
       Etiquette blue34 = new Etiquette(34, new Lot(0, 0, 3, 1, 0, 0));
       Etiquette blue35 = new Etiquette(35, new Lot(0, 3, 0, 1, 0, 0));
       Etiquette blue36 = new Etiquette(36, new Lot(0, 0, 0, 2, 3, 0));
       Etiquette blue37 = new Etiquette(37, new Lot(0, 0, 0, 2, 3, 0));
       Etiquette blue38 = new Etiquette(38, new Lot(0, 0, 0, 3, 5, 0));
       Etiquette blue39 = new Etiquette(39, new Lot(0, 0, 0, 1, 0, 3));
       Etiquette blue40 = new Etiquette(40, new Lot(0, 0, 0, 2, 4, 0));

       Etiquette batimentFixe1 = new Etiquette(41, null);
       Etiquette batimentFixe2 = new Etiquette(42, null);
       Etiquette batimentFixe3 = new Etiquette(43, null); // mine d'or

       _etiquettes = new ArrayList<Etiquette>();

       _etiquettes.add(red1);_etiquettes.add(red2);_etiquettes.add(red3);
       _etiquettes.add(red4);_etiquettes.add(red5);_etiquettes.add(red6);
       
       _etiquettes.add(brown7);_etiquettes.add(brown8);_etiquettes.add(brown9);
       _etiquettes.add(brown10);_etiquettes.add(brown11);_etiquettes.add(brown12);
       _etiquettes.add(brown13);_etiquettes.add(brown14);

       _etiquettes.add(gray15);_etiquettes.add(gray16);_etiquettes.add(gray17);
       _etiquettes.add(gray18);_etiquettes.add(gray19);_etiquettes.add(gray20);
       _etiquettes.add(gray21);_etiquettes.add(gray22);_etiquettes.add(gray23);

       _etiquettes.add(green24);_etiquettes.add(green25);_etiquettes.add(green26);
       _etiquettes.add(green27);_etiquettes.add(green28);_etiquettes.add(green29);
       _etiquettes.add(green30);_etiquettes.add(green31);

       _etiquettes.add(blue32);_etiquettes.add(blue33);_etiquettes.add(blue34);
       _etiquettes.add(blue35);_etiquettes.add(blue36);_etiquettes.add(blue37);
       _etiquettes.add(blue38);_etiquettes.add(blue39);_etiquettes.add(blue40);

       _etiquettes.add(batimentFixe1);_etiquettes.add(batimentFixe2);_etiquettes.add(batimentFixe3);
   }
    public void initialiserLeChateau(){
        _chateau = new Chateau();
    }
	public void initialiserBailliEtPrevot(){
        _lePrevot = new Prevot();
		_leBailli = new Bailli(_lePrevot);
		_leBailli.setPrevot(_lePrevot);
		_lePrevot.set_bailli(_leBailli);
	}
    public void actualisationDesCoupsPossibles(Joueur pJoueur){
        if (_phaseDuJeu.equals(PhaseDuJeu.PLACEMENT_OUVRIER))
        {
            _coupsPossibles.clear();
            _coupsPossibles.add(CoupsPossibles.PASSER_SON_TOUR);

            if (pJoueur.getNbOuvriersDisponibles()>0 && calculerLeCoutDePlacementDunOuvrier(pJoueur)<= pJoueur.getRessouces().getDeniers())
            {
                _coupsPossibles.add(CoupsPossibles.PLACER_OUVRIER_DANS_UNE_CASE);
                _coupsPossibles.add(CoupsPossibles.PLACER_OUVRIER_DANS_LE_CHATEAU);
            }
        }
    }
	public void deplacerLePrevot(int pNbCases, Joueur pJoueur){
		pJoueur.payerEnDeniers(pNbCases);   // encaisser les frais | Le joueur paie une somme de deniers equvalente a NbCases
		_lePrevot.seDeplacer(pNbCases);  // ensuite passer l'ordre de déplacement
	}
	public void avancerBailli(){
		_leBailli.avancer();
	}
	public int calculerLeCoutDePlacementDunOuvrier(Joueur pJoueur){
		if (pJoueur.getPayeUniquementUnDenierPourPlacerSesOuvriers()) return 1;
		else
		{
			int cout = 1;
			for (Joueur unJoueur : _joueurs)
			{
		      if (!unJoueur.estActif())	cout++;
		    }
			return cout;
		}
	}
	public void phaseUne(){
        _phaseDuJeu = PhaseDuJeu.COLLECTE_DES_REVENUS;
		for (Joueur unJoueur : _joueurs)
		{
	      unJoueur.recevoirDeniers(2);
		  unJoueur.recevoirDeniers(unJoueur.getNbResidences());
	      unJoueur.recevoirDeniers(unJoueur.getNbBibliotheques());
	      unJoueur.recevoirDeniers(2 * unJoueur.getNbHotels());
	    }
	}
    public boolean finDeLaPhaseDeux(){
        for(Joueur j : _joueurs)
        {
            if ((j.getNbOuvriersDisponibles() > 0) & (j.estActif()))
                return false;
        }
        return true;
    }
    public void preparationPhaseDeuxPourUnJoueur(Joueur pJoueur){
        if (!finDeLaPhaseDeux())
        {
            _joueurCourant = pJoueur;
        }

    }
    public ArrayList<Joueur> getJoueurs(){
        return _joueurs;
    }
    public PhaseConstructionChateau getPhaseConstructionChateau(){
        return _phaseConstructionChateau;
    }   
    public PhaseDuJeu getPhaseDeJeu(){
        return _phaseDuJeu;
    }
    public ArrayList<CoupsPossibles> getCoupsPossible(){
        return _coupsPossibles;
    }
    public Joueur joueurSuivant(){
        if (_joueurCourant.equals(_joueurs.get(0))) 
        {
            for(int i =1; i<5; i++)
                if (_joueurs.get(i).estActif()) return _joueurs.get(i);
        }
        if (_joueurCourant.equals(_joueurs.get(1)))
        {
            for(int i =2; i<5; i++)
                if (_joueurs.get(i).estActif()) return _joueurs.get(i);
            if (_joueurs.get(0).estActif()) return _joueurs.get(0);
        }
        if (_joueurCourant.equals(_joueurs.get(2)))
        {
            for(int i =3; i<5; i++)
                if (_joueurs.get(i).estActif()) return _joueurs.get(i);
             for(int i =0; i<2; i++)
                if (_joueurs.get(i).estActif()) return _joueurs.get(i);
        }
        if (_joueurCourant.equals(_joueurs.get(3)))
        {
             if (_joueurs.get(4).estActif()) return _joueurs.get(4);
            for(int i =0; i<3; i++)
                if (_joueurs.get(i).estActif()) return _joueurs.get(i);
        }
        if (_joueurCourant.equals(_joueurs.get(4)))
        {
           for(int i =0; i<4; i++)
                if (_joueurs.get(i).estActif()) return _joueurs.get(i);
        }
            return _joueurCourant;
    }
    public void setPhaseDuJeu(PhaseDuJeu pPhaseDuJeu) {
        _phaseDuJeu = pPhaseDuJeu;
    }
    public CoupsPossibles convertStringToCoupsPossible(String pString){
       if (pString.equals(CoupsPossibles.PASSER_SON_TOUR.toString())) return CoupsPossibles.PASSER_SON_TOUR;
       if (pString.equals(CoupsPossibles.PLACER_OUVRIER_DANS_UNE_CASE.toString())) return CoupsPossibles.PLACER_OUVRIER_DANS_UNE_CASE;
       if (pString.equals(CoupsPossibles.PLACER_OUVRIER_DANS_LE_CHATEAU.toString())) return CoupsPossibles.PLACER_OUVRIER_DANS_LE_CHATEAU;
       return CoupsPossibles.TU_NE_PEUX_RIEN_FAIRE;
    }
    public int get_NbOuvrierDansCase5() {
        return _NbOuvrierDansCase5;
    }
    public void set_NbOuvrierDansCase5(int _NbOuvrierDansCase5) {
        this._NbOuvrierDansCase5 = _NbOuvrierDansCase5;
    }
    public void charger(int numCase) {
        switch(_cases.get(numCase-1).getEtiquette().get_numero()) {
            case 7 :
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("ne rien donner");
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(0, 1, 0, 0, 0, 0)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 bois -> 6 deniers");
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(0, 0, 1, 0, 0, 0)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 tissu -> 6 deniers");
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(0, 0, 0, 0, 1, 0)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 pierre -> 6 deniers");
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(0, 0, 0, 0, 0, 1)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 nourriture -> 6 deniers");
                break ;
            case 8 :
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("recevoir 2 nourriture");
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("recevoir 1 tissu");
                break ;
            case 9 :
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("ne rien faire");
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("construire un bâtiment résidentiel(vert)");
                break ;
            case 10 :
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("recevoir 2 tissu");
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("recevoir 1 nourriture");
                break ;
            case 11 :
                _plateauDeJeu.cacherZoneCommandes();
                break ;
            case 12 :
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("ne rien donner");
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(1, 0, 0, 0, 0, 0))) {
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 denier -> 1 bois");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 denier -> 1 tissu");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 denier -> 1 pierre");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("1 denier -> 1 nourriture");
                }
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(2, 0, 0, 0, 0, 0))){
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 1 bois et 1 tissu");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 1 bois et 1 pierre");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 1 bois et 1 nourriture");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 1 tissu et 1 pierre");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 1 tissu et 1 nourriture");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 1 pierre et 1 nourriture");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 2 bois");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 2 tissus");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 2 pierres");
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 2 nourritures");
                }
                break ;
            case 13 :
                _plateauDeJeu.cacherZoneCommandes();
                break ;
            case 14 :
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("ne rien faire");
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("construire un bâtiment de production(gris)");
                break ;
            case 15 :case 16 :
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("ne rien faire");
                _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("construire un bâtiment de prestige(bleu)");
                break ;
            case 19 :
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(0, 0, 2, 0, 0, 0)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 tissu -> 4 points de prestige");
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(0, 0, 3, 0, 0, 0)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("3 tissu -> 6 points de prestige");
                break ;
            case 20 :
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(2, 0, 0, 0, 0, 0)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 deniers -> 3 points de prestige");
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(4, 0, 0, 0, 0, 0)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("4 deniers -> 5 points de prestige");
                break ;
            case 21 :
                _plateauDeJeu.preparerComposerLot(_cases.get(numCase-1).getOuvrier().getPatron(), PhaseDuJeu.ACTIVATION_BATIMENTS);
                break ;
            case 23 :
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(2, 0, 0, 0, 0, 0)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("2 denier -> 1 or");
                if(_cases.get(numCase-1).getOuvrier().getPatron().leJoueurPossedeSuffisamentDeRessource(new Lot(5, 0, 0, 0, 0, 0)))
                    _plateauDeJeu.jComboBoxCommandesCoupsPossible.addItem("5 denier -> 2 or");
                break ;
            case 24 :case 25 :case 26 :case 27 :case 28 :case 29 : case 30 :case 31 :
                _plateauDeJeu.cacherZoneCommandes();
                break ;
            case 32 : case 33 :case 34 :case 36 :case 37 :case 38 :case 39 :case 40 :
                _plateauDeJeu.cacherZoneCommandes();
                break ;
            default :
                break ;
        }
    }
    /**
     *
     * @return
     */
    public Bailli get_leBailli() {
        return _leBailli;
    }
    /**
     *
     * @param _leBailli
     */
    public void set_leBailli(Bailli _leBailli) {
        this._leBailli = _leBailli;
    }
    /**
     *
     * @return
     */
    public Prevot get_lePrevot() {
        return _lePrevot;
    }
    /**
     *
     * @param _lePrevot
     */
    public void set_lePrevot(Prevot _lePrevot) {
        this._lePrevot = _lePrevot;
    }
    public void actualiserPhaseConstructionChateau(){
        if (_leBailli.getPosition() > 18 ) _phaseConstructionChateau = PhaseConstructionChateau.MURAILLES ;
        if (_leBailli.getPosition() > 24 ) _phaseConstructionChateau = PhaseConstructionChateau.TOURS ;
    }

    private void decompteDonjon() {
        for(Joueur j : _joueurs){
            if(j.NbConstructionDonjon == 0) {
                j.gagnerPointsPrestige(-2);
                if(j.getPrestige() <0 )
                    j.set_prestige(0);
            }   else    {
                ConversionFaveurs CTF = new ConversionFaveurs(_plateauDeJeu, true, j, this);
                if(j.TFligneTouche == 1) {
                    if(j.TFpositionL1 == 1) j.gagnerPointsPrestige(1);
                    if(j.TFpositionL1 == 2) j.gagnerPointsPrestige(2);
                    if(j.TFpositionL1 == 3) j.gagnerPointsPrestige(3);
                    if(j.TFpositionL1 == 4) j.gagnerPointsPrestige(4);
                    if(j.TFpositionL1 == 5) j.gagnerPointsPrestige(5);
                }
                if(j.TFligneTouche == 2) {
                    if(j.TFpositionL2 == 1) j.gagnerPointsPrestige(3);
                    if(j.TFpositionL2 == 2) j.gagnerPointsPrestige(4);
                    if(j.TFpositionL2 == 3) j.gagnerPointsPrestige(5);
                    if(j.TFpositionL2 == 4) j.gagnerPointsPrestige(6);
                    if(j.TFpositionL2 == 5) j.gagnerPointsPrestige(7);
                }
            }
        }
    }

    private void decompteFinale() {
        
    }

    private void decompteMurailles() {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private void decompteTours() {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
